package talayaco.manager;

import java.util.List;
import java.util.Map;

import talayaco.vo.ClienteVO;

public interface GestionClientesMAN {

	/**
	 * Este metodo recibe los datos de un cliente y lo agrega al sistema
	 * 
	 * @param cliente
	 *            cliente a ser agregado al sistema
	 */
	void insertCliente(Map<String, String> cliente) throws Exception;

	/**
	 * Este metodo actualiza los datos del cliente pasado como parametro
	 * 
	 * @param cliente
	 *            cliente conteniendo los nuevos datos actualizados
	 */
	void updateCliente(Map<String, String> cliente) throws Exception;

	/**
	 * Este metodo elimina el cliente pasado como parametro
	 * 
	 * @param nombre
	 *            nombre del cliente a eliminar
	 */
	void deleteCliente(String nombre) throws Exception;

	/**
	 * Este metodo retorna los datos de un cliente a partir de su nombre
	 * 
	 * @param nombre
	 *            nombre del cliente
	 * @return mapa con todos los datos del cliente
	 */
	Map<String, String> getClienteByNombre(String nombre) throws Exception;

	/**
	 * Este metodo retorna una lista de los nombres de los clientes
	 * 
	 * @return listado de clientes
	 */
	List<Map<String, String>> getClientes() throws Exception;

	/**
	 * Este metodo retorna una lista de clienteVO
	 * 
	 * @return listado de clientes
	 */
	List<ClienteVO> getClientesVO() throws Exception;

	/**
	 * Este metodo determina si el cliente que se desea ingresar ya existe en el
	 * sistema
	 * 
	 * @param cliente
	 *            el cliente a ingrear
	 * @return true si ya existe, false de lo contrario
	 */
	Boolean existeCliente(String nombre) throws Exception;

	/**
	 * Metodo que valida que un cliente no posea movimientos asociados
	 * 
	 * @param nombreCliete
	 *            Nombre cliente
	 * @return true
	 * @throws Exception
	 */
	Boolean validarMovimientosCliente(String nombreCliente) throws Exception;

}
